<?php
/*
 This file is part of PSDG.

    PSDG is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Foobar is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
    along with PSDG.  If not, see <http://www.gnu.org/licenses/>.

*/


require_once("ConexionBD.inc");
class ConexionBDPostgres extends ConexionBD
{
  function __construct($arregloParametros = "")
  {
	 $this->_parametrosConexion = $arregloParametros;
  }
  
  function conectar()
  {

	$servidor =  "localhost";
//eva
	//$usuario  = "jeantech";
	$clave    =  "jeantech";
//casa
	$usuario = "postgres";
//	$clave = "aerdna";
//cedesoft
	//$usuario = "hegeprosoft";
	//$clave = "hegeprosoft";
	$bd =  "hegeprosoft";

	if($this->_conexion = pg_connect("dbname=$bd host=$servidor user=$usuario password=$clave"))
	  return true;
	else
	  return false;
  }
  
  function desconectar()
  {
		return pg_close($conexion);
  }
  
// 	function establecer_bd($bd)
// 	{
// 		return mysql_select_db($bd, $this->_conexion);
// 	}
// 	
// 	function restablecer_bd_original()
// 	{
// 		return mysql_select_db($this->_parametrosConexion['con_nombre_bd'], $this->_conexion);
// 	}
//   
// 	function obtener_error()
// 	{
// 		return mysql_error($this->_conexion);
// 	}
//   
//   function inicializarSQL()
//   {
// 	$this->_sql = $instruccionSQL;
//   }
  
  function ejecutarSQL($instruccionSQL)
  {
		$this->_resultSet = pg_query($instruccionSQL);
  } 
  
	function obtenerResultset()
	{
		return $this->_resultSet;
	}
  
  function obtenerResultadoComoArreglo()
  {
		$arreglo = array();

		while ($row = pg_fetch_array($this->_resultSet, NULL)) 
		{
			$arreglo[] = $row;
		}
		return $arreglo;
  }
  
	function obtenerFilaComoArregloAsociativo()
	{
		if($fila = pg_fetch_array($this->_resultSet, NULL, PGSQL_ASSOC))
			return $fila;
		else 
			return false;
	}
	
	function obtenerFilaComoArreglo()
	{
		if($fila = pg_fetch_array($this->_resultSet, NULL, PGSQL_NUM))
			return $fila;
		else 
			return false;
	}
  
	/*DEPRECATED, USAR obtenerFilaComoCadena() EN SU LUGAR*/
// 	function obtenerResultadoComoCadena()
//   {
// 		$row = mysql_fetch_array($this->_resultSet);
// 		return $row[0];
//   }
  
	function obtenerFilaComoCadena()
	{
		$row = pg_fetch_array($this->_resultSet, NULL, PGSQL_NUM);
		return implode(",", $row);
	}
	
// 	function obtenerArregloMetaDatosColumnas()
// 	{
// 		$i = 0;
// 		$arregloMeta = array();
// 		$numero_campos = mysql_num_fields($this->_resultSet);
// 		while ($i < $numero_campos) 
// 		{
// 			$metaRow = mysql_fetch_field($this->_resultSet, $i);
// 			$arregloMeta[] = $metaRow;
// 			$i++;
// 		}
// 		return $arregloMeta;
// 	}
  
  function obtenerParametrosConexion()
  {
	return $this->_parametrosConexion;
  }
  
	function obtenerNumeroFilas()
	{
		return pg_num_rows($this->_resultSet);
	}
	
	function existeRegistro($campos, $tablas, $condiciones)
	{
		$sql = "SELECT $campos FROM $tablas WHERE $condiciones";
		$this->ejecutarSQL($sql);
		return $this->obtenerNumeroFilas();
	}
	
// 	function obtenerNombresTablasBD($nombre_tabla_actua="")
// 	{
// 		$arreglo_tablas = array();
// 		/*DEPRECATED, SE ESPERA QUE EN UNA VERSION POSTERIOR SE PUEDAN RESTRINGIR
// 		 * CORRECTAMENTE LAS TABLAS DE DONDE PUEDEN TOMAR DATOS
// 		 * EN SU LUGAR SE UTILIZARA LA FUNCION consultarTablasBD*/
// 		if($nombre_tabla_actual)
// 			$this->consultarDependenciasForaneas($nombre_tabla_actual, $arreglo_tablas);
// 		else
// 			$this->consultarTablasBD($arreglo_tablas);
// 		return $arreglo_tablas;
// 	}
	
// 	function consultarTablasBD(&$arreglo_tablas)
// 	{
// 		$nombre_bd = $this->_parametrosConexion['con_nombre_bd'];
// 		$sql = "SELECT TABLES.TABLE_NAME
// 				FROM TABLES
// 				WHERE TABLES.TABLE_SCHEMA = '$nombre_bd'";
// 		$this->establecer_bd("information_schema");
// 		$this->ejecutarSQL($sql);
// 		$arreglo_tablas = $this->obtenerResultadoComoArreglo();
// 		$this->restablecer_bd_original();
// 	}
	
	/*DEPRECATED, SE ESPERA QUE EN UNA VERSION POSTERIOR SE PUEDAN RESTRINGIR
	 * CORRECTAMENTE LAS TABLAS DE DONDE PUEDEN TOMAR DATOS*/
// 	function consultarDependenciasForaneas($nombre_tabla_actual, &$arreglo_tablas)
// 	{
// 		//print_r($arreglo_tablas);
// 		$nombre_bd = $this->_parametrosConexion['con_nombre_bd'];
// 		$sql = "(SELECT KEY_COLUMN_USAGE.REFERENCED_TABLE_NAME
// 				FROM KEY_COLUMN_USAGE
// 				WHERE KEY_COLUMN_USAGE.TABLE_SCHEMA = '$nombre_bd'
// 				AND KEY_COLUMN_USAGE.TABLE_NAME = '$nombre_tabla_actual'
// 				AND KEY_COLUMN_USAGE.REFERENCED_TABLE_NAME IS NOT NULL
// 				AND KEY_COLUMN_USAGE.REFERENCED_COLUMN_NAME IS NOT NULL)";
// 		$this->establecer_bd("information_schema");
// 		//echo "---".$sql;
// 		$this->ejecutarSQL($sql);
// 		$arreglo_nombres_tablas = $this->obtenerResultadoComoArreglo();
// 		if($arreglo_nombres_tablas)
// 		{
// 			//echo "TIENE dependencias.. meto $nombre_tabla_actual y busco<br>";
// 			$arreglo_tablas[] = array($nombre_tabla_actual);
// 			foreach($arreglo_nombres_tablas AS $posicion => $nombre)
// 			{
// 				//echo "buscar recursiva de..$nombre[0]<br>";
// 				$this->consultarDependenciasForaneas($nombre[0], $arreglo_tablas);
// 			}
// 		}
// 		else
// 		{
// 			//echo "NO TIENE dependencias..meto $nombre_tabla_actual<br>";
// 			$arreglo_tablas[] = array($nombre_tabla_actual);
// 		}
// 		$this->restablecer_bd_original();
// 		//print_r($arreglo_tablas);
// 		//return $arreglo_tablas;
// 	}
	
// 	function obtenerNombresCamposTablaBD($nombre_tabla, $tipo_campo_actual="")
// 	{
// 		$nombre_bd = $this->_parametrosConexion['con_nombre_bd'];
// 		if($tipo_campo_actual)
// 		{
// 			$pos_parentesis = strpos($tipo_campo_actual, "(");
// 			if ($pos_parentesis === false)
// 				$tipo_dato = substr($tipo_campo_actual,0);
// 			else
// 				$tipo_dato = substr($tipo_campo_actual,0,$pos_parentesis);
// 				
// 			$sql_tipo = "AND DATA_TYPE = '$tipo_dato'";
// 		}
// 		$sql = "SELECT COLUMN_NAME 
// 				FROM COLUMNS 
// 				WHERE TABLE_NAME = '$nombre_tabla' 
// 				AND TABLE_SCHEMA = '$nombre_bd'
// 				$sql_tipo";
// 		$this->establecer_bd("information_schema");
// 		//echo $sql;
// 		$this->ejecutarSQL($sql);
// 		$arreglo_nombres_campos = $this->obtenerResultadoComoArreglo();
// 		$this->restablecer_bd_original();
// 		return $arreglo_nombres_campos;
// 	}
	
// 	function obtenerArregloInfoCamposDeTabla($nombre_tabla)
// 	{
// 		$sql = "describe $nombre_tabla";
// 		$this->ejecutarSQL($sql);
// 		$arreglo_info_campos = $this->obtenerResultadoComoArreglo();
// 		return $arreglo_info_campos;
// 	}
}
?>
